package logica.locacao;

import java.io.Serializable;

import util.Constantes;
import logica.veiculo.Estado;

public enum Seguro implements Serializable {
	
	SEM_SEGURO ( Constantes.SEM_SEGURO, 0.0 ),
	PARCIAL( Constantes.ESTADOS_PARCIAL, Constantes.PORCENTAGEM_SEGURO_PARCIAL ),
	TOTAL( Constantes.ESTADOS_TOTAL, Constantes.PORCENTAGEM_SEGURO_TOTAL );
	
	private Estado[] estados;
	private double porcentagem;

	/**
	 * Construtor do enum Seguro.
	 * @param Um array de estados a serem cobertos pelo seguro.
	 * @param A porcentagem referente a cobertura do seguro.
	 */
	private Seguro( Estado[] estados, double porcentagem ){
		this.estados = estados;
		this.porcentagem = porcentagem;
	}
	
	/**
	 * Retorna todos os estados que sao cobertos.
	 * @return O array de estados que sao cobertos
	 */
	public Estado[] getEstadosCobertos(){
		return this.estados;
	}
	
	/**
	 * Retorna a porcentagem que esta associada ao seguro
	 * @return A porcentagem que esta associada ao seguro
	 */
	public double getPorcentagem() {
		return this.porcentagem;
	}
	
	/**
	 * Verifica se a cobertura cobre determinado estado.
	 * @param O estado a ser verificado
	 * @return <i>true</i> se cobre, <i>false</i> caso contrario
	 */
	public boolean cobre(Estado estado){
		for (int i=0; i<this.estados.length; i++){
			if ( this.estados[i].equals(estado) ){
				return true;
			}
		}
		return false;
	}
	
	/**
	 * Pega o valor total de multa referente somatorio
	 * de todos valores de multas de cada estado coberto pelo seguro.
	 */
	public int getValorDeMultaTotal(){
		int valorTotal = 0;
		for ( int i=0; i<estados.length; i++ ){
			if ( estados[i] != null ){
				valorTotal+= estados[i].getValorDeMulta();
			}
		}
		return valorTotal;
	}
}